@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,191 @@
|
|
|
1
|
+
# PHP Guidelines
|
|
2
|
+
|
|
3
|
+
> PHP conventions and coding standards.
|
|
4
|
+
|
|
5
|
+
**Related Skills:** `php`, `php-coder`, `php-service`
|
|
6
|
+
**Related Rules:** `php-coding.md`
|
|
7
|
+
|
|
8
|
+
## Quick Reference
|
|
9
|
+
|
|
10
|
+
| Topic | Rule |
|
|
11
|
+
|-----------------|-------------------------------------------------------|
|
|
12
|
+
| Strict types | `declare(strict_types=1);` in every file |
|
|
13
|
+
| Variables | `camelCase` |
|
|
14
|
+
| Array keys | `snake_case` |
|
|
15
|
+
| Constants | `UPPER_SNAKE_CASE` |
|
|
16
|
+
| Strings | Single quotes (no interpolation), prefer concatenation (`.`), `sprintf()` only when complex |
|
|
17
|
+
| Comparisons | Always `===` / `!==`, Yoda style (`null === $var`) |
|
|
18
|
+
| Types | Explicit types for properties, parameters, returns |
|
|
19
|
+
|
|
20
|
+
## Naming
|
|
21
|
+
|
|
22
|
+
- Method names must be **expressive**, not declarative. No abbreviations.
|
|
23
|
+
- Boolean checks: `isValid()`, `hasPermission()` — not `valid()`, `check()`
|
|
24
|
+
- Retrieving: `getUser()`, `fetchUserData()` — not `user()`, `userData()`
|
|
25
|
+
- Actions: `sendEmail()`, `processPayment()` — not `email()`, `payment()`
|
|
26
|
+
|
|
27
|
+
## Strings
|
|
28
|
+
|
|
29
|
+
- Single quotes when no interpolation: `$table = 'users';`
|
|
30
|
+
- Prefer concatenation with `.` operator: `'Hi ' . $name . '!'`
|
|
31
|
+
- Use `sprintf()` only when concatenation becomes unreadable (many placeholders, formatting): `sprintf('There are %d items in %s', $count, $location)`
|
|
32
|
+
|
|
33
|
+
## Control Structures
|
|
34
|
+
|
|
35
|
+
- **No one-liner IF** statements
|
|
36
|
+
- **Prefer early return** over `else` / nested `if`
|
|
37
|
+
- Ternary for short statements only
|
|
38
|
+
|
|
39
|
+
```php
|
|
40
|
+
// ✅ Early return
|
|
41
|
+
if (!$conditionA) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
// conditionA passed...
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Typed Properties
|
|
48
|
+
|
|
49
|
+
- Always use typed properties. Nullable with default `null`:
|
|
50
|
+
|
|
51
|
+
```php
|
|
52
|
+
// ✅ Good
|
|
53
|
+
public ?int $age = null;
|
|
54
|
+
|
|
55
|
+
// ❌ Bad
|
|
56
|
+
public int | null $age;
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Typed Arguments
|
|
60
|
+
|
|
61
|
+
- Prefer typed method arguments over arrays. Named arguments with spread for bulk:
|
|
62
|
+
|
|
63
|
+
```php
|
|
64
|
+
// ✅ Type-safe
|
|
65
|
+
public function createUser(int $id, string $name): void {}
|
|
66
|
+
|
|
67
|
+
// Call with array via spread
|
|
68
|
+
$data = ['id' => 1, 'name' => 'John'];
|
|
69
|
+
createUser(...$data);
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## DocBlocks
|
|
73
|
+
|
|
74
|
+
- **Only** use DocBlocks to explain complex logic or when type hints are insufficient
|
|
75
|
+
- **Must** add DocBlock for iterable types: `@param array<int, MyObject> $items`
|
|
76
|
+
- Do NOT add DocBlocks that just repeat the type signature
|
|
77
|
+
|
|
78
|
+
## Arrays
|
|
79
|
+
|
|
80
|
+
- Short syntax only (`[]`, not `array()`)
|
|
81
|
+
- Trailing comma on each line
|
|
82
|
+
- Each item on a separate line
|
|
83
|
+
- Keys in `snake_case`
|
|
84
|
+
|
|
85
|
+
## Enums
|
|
86
|
+
|
|
87
|
+
- Cases must be **UPPERCASE**: `case MONDAY;`
|
|
88
|
+
- Use [backed enums](https://www.php.net/manual/en/language.enumerations.backed.php) for database values
|
|
89
|
+
|
|
90
|
+
## Operator Precedence — Always Use Parentheses
|
|
91
|
+
|
|
92
|
+
When mixing `?:` (ternary/elvis), `??` (null coalessce), or `.` (concatenation),
|
|
93
|
+
**always use explicit parentheses** to make the intended evaluation order unambiguous.
|
|
94
|
+
|
|
95
|
+
```php
|
|
96
|
+
// ❌ Bad — ambiguous: is it ($a ?: 'index ') . $i or $a ?: ('index ' . $i)?
|
|
97
|
+
$label = $a ?: 'index ' . $i;
|
|
98
|
+
|
|
99
|
+
// ✅ Good — explicit and unambiguous
|
|
100
|
+
$label = $a ?: ('index ' . $i);
|
|
101
|
+
|
|
102
|
+
// ❌ Bad — nested ternary/elvis without grouping
|
|
103
|
+
$value = $a ?: $b ?: $c . $d;
|
|
104
|
+
|
|
105
|
+
// ✅ Good
|
|
106
|
+
$value = $a ?: ($b ?: ($c . $d));
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
This applies to **any** combination of operators where precedence is not immediately obvious.
|
|
110
|
+
When in doubt, add parentheses — readability beats brevity.
|
|
111
|
+
|
|
112
|
+
## Performance Tips
|
|
113
|
+
|
|
114
|
+
### ❌ Avoid `array_merge()` in Loops
|
|
115
|
+
|
|
116
|
+
`array_merge()` inside a loop copies the entire array each iteration → **O(n²)**.
|
|
117
|
+
|
|
118
|
+
```php
|
|
119
|
+
// ❌ Bad — O(n²)
|
|
120
|
+
$all = [];
|
|
121
|
+
foreach ($pages as $page) {
|
|
122
|
+
$all = array_merge($all, $page->items());
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// ✅ Good — O(n)
|
|
126
|
+
$all = [];
|
|
127
|
+
foreach ($pages as $page) {
|
|
128
|
+
array_push($all, ...$page->items());
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## Traits
|
|
133
|
+
|
|
134
|
+
- One `use` statement per line:
|
|
135
|
+
|
|
136
|
+
```php
|
|
137
|
+
// ✅ Good
|
|
138
|
+
use TraitA;
|
|
139
|
+
use TraitB;
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
## Interfaces
|
|
143
|
+
|
|
144
|
+
- Namespace: `App\Contracts` (grouped in subfolders)
|
|
145
|
+
- No `Interface` suffix: `SmsProvider`, not `SmsProviderInterface`
|
|
146
|
+
|
|
147
|
+
## Return Types — `static` vs `self`
|
|
148
|
+
|
|
149
|
+
- **Prefer `static`** for fluent methods (setters, builders, chainable methods) — it preserves the actual class type in subclasses.
|
|
150
|
+
- **Use `self`** when it is intentionally more precise — e.g., `final` classes, named constructors, or when you explicitly want to lock the return type to the declaring class.
|
|
151
|
+
- This is especially important for Eloquent models, DTOs, and any class that may be extended.
|
|
152
|
+
|
|
153
|
+
```php
|
|
154
|
+
// ✅ Preferred — preserves subclass type
|
|
155
|
+
public function setName(string $name): static
|
|
156
|
+
{
|
|
157
|
+
$this->name = $name;
|
|
158
|
+
return $this;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// ✅ Also fine — class is final, self is more precise
|
|
162
|
+
final class Config
|
|
163
|
+
{
|
|
164
|
+
public function setName(string $name): self
|
|
165
|
+
{
|
|
166
|
+
$this->name = $name;
|
|
167
|
+
return $this;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
## Constructor Property Promotion
|
|
173
|
+
|
|
174
|
+
- Each property on a separate line, trailing comma on last property
|
|
175
|
+
- Preferred over manual assignment in constructor body
|
|
176
|
+
|
|
177
|
+
## JSON Handling
|
|
178
|
+
|
|
179
|
+
- **Always validate** — `json_decode()` with `JSON_THROW_ON_ERROR`, never silent failure.
|
|
180
|
+
- **Fix malformed JSON** — trailing commas, single quotes, unquoted keys. Clean before parsing.
|
|
181
|
+
- **Pretty-print** — `JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE` for readability.
|
|
182
|
+
- **Type safety** — decode to typed DTOs or interfaces, not untyped arrays/objects.
|
|
183
|
+
|
|
184
|
+
```php
|
|
185
|
+
// ✅ Safe JSON decoding
|
|
186
|
+
$data = json_decode($jsonString, true, 512, JSON_THROW_ON_ERROR);
|
|
187
|
+
|
|
188
|
+
// ❌ Silent failure
|
|
189
|
+
$data = json_decode($jsonString);
|
|
190
|
+
```
|
|
191
|
+
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# Git & Version Control Guidelines
|
|
2
|
+
|
|
3
|
+
> Project-specific Git conventions. Branch naming, commit messages, PR workflow.
|
|
4
|
+
|
|
5
|
+
**Related Skills:** `git-workflow`, `conventional-commits-writing`
|
|
6
|
+
**Related Rules:** `commit-conventions.md`
|
|
7
|
+
|
|
8
|
+
## Branch Naming
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
{type}/{ticket-id}/{short-description}
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Types: `feat/`, `fix/`, `hotfix/`, `chore/`, `docs/`, `test/`
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
feat/DEV-1234/user-notification-preferences
|
|
18
|
+
fix/DEV-5678/null-pointer-in-import
|
|
19
|
+
chore/refactor-agent-setup
|
|
20
|
+
hotfix/DEV-999/critical-payment-bug
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Commit Messages
|
|
24
|
+
|
|
25
|
+
See `commit-conventions` rule for base format. Key type selection:
|
|
26
|
+
|
|
27
|
+
- `feat` — new capability. `fix` — bug/regression. `refactor` — structure only, NO behavior change.
|
|
28
|
+
- `docs` — docs only. `test` — tests only. `ci` — CI/workflows. `chore` — maintenance/cleanup.
|
|
29
|
+
- `perf` — performance. `build` — build tooling. `style` — formatting only.
|
|
30
|
+
|
|
31
|
+
**Scope:** Jira ID or area name (`api`, `auth`, `skills`). Only add when it improves clarity.
|
|
32
|
+
|
|
33
|
+
**Description:** Intent, not implementation. Imperative mood. Max 72 chars. No generic filler.
|
|
34
|
+
|
|
35
|
+
**Breaking:** `!` after type/scope or `BREAKING CHANGE:` footer.
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
feat(api)!: rename invoice status values
|
|
39
|
+
refactor(auth)!: remove legacy session flow
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**Splitting:** Mixed concerns → split commits. Don't hide unrelated changes in one.
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
refactor(skills): remove duplicate routing helpers
|
|
46
|
+
ci(lint): add skill-lint workflow
|
|
47
|
+
docs(readme): document new lint tasks
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
**Squash merge titles:** Conventional Commit format, describe net effect, not every internal commit.
|
|
51
|
+
|
|
52
|
+
### Anti-patterns
|
|
53
|
+
|
|
54
|
+
- `update stuff` / `fix bug` / `changes`
|
|
55
|
+
- `refactor` for bug fixes, `chore` for behavior changes
|
|
56
|
+
- Multiple unrelated concerns in one commit
|
|
57
|
+
|
|
58
|
+
### Decision checklist
|
|
59
|
+
|
|
60
|
+
1. Behavior changed? → `feat` or `fix`
|
|
61
|
+
2. Structure only? → `refactor`
|
|
62
|
+
3. Only docs/tests/CI? → `docs`/`test`/`ci`
|
|
63
|
+
4. Scope useful or noise?
|
|
64
|
+
5. Multiple commits hiding in one?
|
|
65
|
+
|
|
66
|
+
### Examples by area
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
# Features
|
|
70
|
+
feat(DEV-2133): send email to customer when product is shipped
|
|
71
|
+
|
|
72
|
+
# Bug fixes
|
|
73
|
+
fix(import): handle null values in equipment JSON
|
|
74
|
+
|
|
75
|
+
# Refactoring
|
|
76
|
+
refactor: extract user sync logic into dedicated service
|
|
77
|
+
|
|
78
|
+
# Skills / Rules / Agent config
|
|
79
|
+
refactor(skills): merge duplicate analysis skills
|
|
80
|
+
feat(rules): add analysis routing quality gate
|
|
81
|
+
fix(skills): restore concrete validation in skill reviewer
|
|
82
|
+
|
|
83
|
+
# CI / Tooling
|
|
84
|
+
ci(lint): add skill linter workflow
|
|
85
|
+
feat(linter): detect pointer-only skills
|
|
86
|
+
|
|
87
|
+
# Docs
|
|
88
|
+
docs(roadmap): add phase 3 implementation plan
|
|
89
|
+
docs(readme): clarify source-of-truth workflow
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Pull Requests
|
|
93
|
+
|
|
94
|
+
- PR title: Conventional Commit format — `feat(DEV-1234): short description`
|
|
95
|
+
- Fill PR template, link Jira ticket, ensure quality gates pass
|
|
96
|
+
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# Job Guidelines
|
|
2
|
+
|
|
3
|
+
> Queue job conventions. Horizon tags, uniqueness, retries, rate limiting.
|
|
4
|
+
|
|
5
|
+
**Related Skills:** `jobs-events`, `performance`
|
|
6
|
+
**Related Guidelines:** [patterns/service-layer.md](patterns/service-layer.md)
|
|
7
|
+
|
|
8
|
+
## Constructor
|
|
9
|
+
|
|
10
|
+
- Pass model **IDs** (not model instances) to reduce serialized job size
|
|
11
|
+
- Always set queue via `$this->onQueue()` — queue names from backed enums
|
|
12
|
+
|
|
13
|
+
```php
|
|
14
|
+
public function __construct(public int $productId)
|
|
15
|
+
{
|
|
16
|
+
$this->onQueue(Queue::SEARCH->value);
|
|
17
|
+
}
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Tags (Horizon)
|
|
21
|
+
|
|
22
|
+
Always add `tags()` for filtering in Horizon:
|
|
23
|
+
|
|
24
|
+
```php
|
|
25
|
+
public function tags(): array
|
|
26
|
+
{
|
|
27
|
+
return [
|
|
28
|
+
self::class,
|
|
29
|
+
Product::class . ':' . $this->productId,
|
|
30
|
+
];
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Uniqueness
|
|
35
|
+
|
|
36
|
+
- Add `uniqueId()` if the job should not run twice concurrently
|
|
37
|
+
- **Must** also set `$uniqueFor` to prevent stuck locks:
|
|
38
|
+
|
|
39
|
+
```php
|
|
40
|
+
public int $uniqueFor = 3600;
|
|
41
|
+
|
|
42
|
+
public function uniqueId(): string
|
|
43
|
+
{
|
|
44
|
+
return (string) $this->productId;
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Error Handling & Retries
|
|
49
|
+
|
|
50
|
+
- Set `$maxExceptions` to limit unhandled exceptions before failing
|
|
51
|
+
- Define `backoff()` for retry intervals:
|
|
52
|
+
|
|
53
|
+
```php
|
|
54
|
+
public int $maxExceptions = 3;
|
|
55
|
+
|
|
56
|
+
/** @return int[] */
|
|
57
|
+
public function backoff(): array
|
|
58
|
+
{
|
|
59
|
+
return [5, 10, 30];
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Rate Limiting (External APIs)
|
|
64
|
+
|
|
65
|
+
Use `WithoutOverlapping` middleware for per-customer sequential execution:
|
|
66
|
+
|
|
67
|
+
```php
|
|
68
|
+
public function middleware(): array
|
|
69
|
+
{
|
|
70
|
+
return [new WithoutOverlapping($this->customerId)];
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Serialization
|
|
75
|
+
|
|
76
|
+
- Pass IDs or compact DTOs — not full Eloquent models with loaded relations.
|
|
77
|
+
- Model may change between dispatch and execution — design for this.
|
|
78
|
+
- Never serialize closures, service instances, or large nested structures.
|
|
79
|
+
|
|
80
|
+
## Idempotency
|
|
81
|
+
|
|
82
|
+
- Assume queued jobs may run more than once.
|
|
83
|
+
- Design handlers so retries don't create duplicate side effects.
|
|
84
|
+
- Especially careful with: emails, external APIs, payments, imports, record creation.
|
|
85
|
+
- Add explicit guards when duplicate execution would be harmful.
|
|
86
|
+
|
|
87
|
+
## Events
|
|
88
|
+
|
|
89
|
+
- Use events for meaningful occurrences, not every internal method call.
|
|
90
|
+
- Past-tense naming: `OrderPlaced`, `InvoicePaid`, `UserRegistered`.
|
|
91
|
+
- Keep event payloads focused.
|
|
92
|
+
- **Laravel 11+:** automatic event/listener discovery — no manual registration.
|
|
93
|
+
|
|
94
|
+
## Listeners
|
|
95
|
+
|
|
96
|
+
- One responsibility per listener.
|
|
97
|
+
- Delegate large business logic to services.
|
|
98
|
+
- Avoid deep hidden chains of listeners.
|
|
99
|
+
|
|
100
|
+
## Dispatching
|
|
101
|
+
|
|
102
|
+
- Be explicit: immediately, after response, or on queue.
|
|
103
|
+
- Don't change sync/async behavior casually in existing flows.
|
|
104
|
+
|
|
105
|
+
## General
|
|
106
|
+
|
|
107
|
+
- Avoid batches unless truly needed (relies on MySQL)
|
|
108
|
+
- Use Service classes for complex business logic inside `handle()`
|
|
109
|
+
- `ShouldQueue` is required for queued execution — without it, runs synchronously
|
|
110
|
+
- Set `$tries` and `$backoff` — unlimited retries can overwhelm the queue
|
|
111
|
+
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Livewire Guidelines
|
|
2
|
+
|
|
3
|
+
> Livewire component conventions — state, actions, forms, performance, Alpine.js, templates.
|
|
4
|
+
|
|
5
|
+
**Related Skills:** `livewire`, `flux`, `blade-ui`
|
|
6
|
+
|
|
7
|
+
## Component Structure (Livewire 3.x)
|
|
8
|
+
|
|
9
|
+
```php
|
|
10
|
+
#[Layout('layouts.app')]
|
|
11
|
+
#[Title('User List')]
|
|
12
|
+
final class UserList extends Component
|
|
13
|
+
{
|
|
14
|
+
public string $search = '';
|
|
15
|
+
|
|
16
|
+
public function render(): \Illuminate\View\View
|
|
17
|
+
{
|
|
18
|
+
return view('livewire.user-list', [
|
|
19
|
+
'users' => User::query()->where('name', 'like', '%' . $this->search . '%')->paginate(20),
|
|
20
|
+
]);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## State Management
|
|
26
|
+
|
|
27
|
+
- Use typed public properties for component state.
|
|
28
|
+
- Keep state minimal — only what the UI needs.
|
|
29
|
+
- `#[Locked]` for properties that must not be tampered with from frontend.
|
|
30
|
+
- `#[Url]` for properties that should sync with URL query string.
|
|
31
|
+
|
|
32
|
+
## Actions
|
|
33
|
+
|
|
34
|
+
- Public methods are callable from frontend.
|
|
35
|
+
- Validate input before processing: `$this->validate()`.
|
|
36
|
+
- `$this->dispatch()` for cross-component communication (Livewire 3).
|
|
37
|
+
|
|
38
|
+
## Forms
|
|
39
|
+
|
|
40
|
+
- Use Livewire Form Objects (`Livewire\Form`) for complex forms (Livewire 3).
|
|
41
|
+
- `wire:model` for two-way binding.
|
|
42
|
+
- `wire:model.live` for real-time updates, `wire:model.debounce` for delayed.
|
|
43
|
+
- Validate with Laravel validation rules.
|
|
44
|
+
|
|
45
|
+
## Performance
|
|
46
|
+
|
|
47
|
+
- `wire:key` on list items for DOM tracking.
|
|
48
|
+
- `#[Computed]` for derived data cached per request (Livewire 3).
|
|
49
|
+
- Avoid large datasets — paginate or filter.
|
|
50
|
+
- `wire:loading` for loading indicators.
|
|
51
|
+
|
|
52
|
+
## Alpine.js Integration
|
|
53
|
+
|
|
54
|
+
- `@entangle` to share state between Livewire and Alpine.
|
|
55
|
+
- `$wire` in Alpine to call Livewire methods.
|
|
56
|
+
- Alpine for client-side-only interactions (dropdowns, animations).
|
|
57
|
+
|
|
58
|
+
## Template Rules
|
|
59
|
+
|
|
60
|
+
- Every Livewire view must have **one root element** (usually `<div>`).
|
|
61
|
+
- Use `wire:key` on dynamic lists.
|
|
62
|
+
- Use `wire:loading` for user feedback.
|
|
63
|
+
|
|
64
|
+
## Do NOT
|
|
65
|
+
|
|
66
|
+
- Put heavy business logic in components — delegate to services.
|
|
67
|
+
- Use Livewire for purely static pages — use Blade.
|
|
68
|
+
- Expose sensitive data as public properties.
|
|
69
|
+
- Nest Livewire components deeply — keep tree shallow.
|
|
70
|
+
- Put heavy computation in `render()` — runs on every update.
|
|
71
|
+
- Skip `wire:key` on list items — causes DOM diffing issues.
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Logging Guidelines
|
|
2
|
+
|
|
3
|
+
> Logging conventions — levels, structured context, what to log, Sentry patterns.
|
|
4
|
+
|
|
5
|
+
**Related Skills:** `logging-monitoring`, `grafana`
|
|
6
|
+
|
|
7
|
+
## Use Laravel's Log Facade
|
|
8
|
+
|
|
9
|
+
```php
|
|
10
|
+
use Illuminate\Support\Facades\Log;
|
|
11
|
+
|
|
12
|
+
// Standard logging
|
|
13
|
+
Log::info('Import completed', ['customer_id' => $customerId, 'count' => $count]);
|
|
14
|
+
|
|
15
|
+
// Channel-specific
|
|
16
|
+
Log::channel('loki')->info('Import snapshot', ['data' => $snapshotData]);
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Structured Context — Always
|
|
20
|
+
|
|
21
|
+
```php
|
|
22
|
+
// ✅ Correct — structured context
|
|
23
|
+
Log::warning('Import failed', ['customer_id' => $id, 'error' => $message]);
|
|
24
|
+
|
|
25
|
+
// ❌ Wrong — interpolated message
|
|
26
|
+
Log::warning("Import failed for customer {$id}: {$message}");
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Context keys must be `snake_case` — consistency matters for Loki queries.
|
|
30
|
+
|
|
31
|
+
## Log Levels
|
|
32
|
+
|
|
33
|
+
| Level | When | Example |
|
|
34
|
+
|---|---|---|
|
|
35
|
+
| `emergency` | System unusable | Database unreachable |
|
|
36
|
+
| `critical` | Immediate action required | Payment gateway down |
|
|
37
|
+
| `error` | Needs investigation | Import failed for customer |
|
|
38
|
+
| `warning` | Unusual, may need attention | Rate limit approaching |
|
|
39
|
+
| `info` | Significant business events | Import completed, user created |
|
|
40
|
+
| `debug` | Diagnostic (dev/staging only) | Query params, intermediate values |
|
|
41
|
+
|
|
42
|
+
## What to Log
|
|
43
|
+
|
|
44
|
+
- Business events: imports, state transitions, user actions
|
|
45
|
+
- Error context: what was happening, with which data, for which customer
|
|
46
|
+
- External interactions: API calls, webhook receipts
|
|
47
|
+
- Performance markers: long operations, batch sizes, durations
|
|
48
|
+
|
|
49
|
+
## What NOT to Log
|
|
50
|
+
|
|
51
|
+
- Passwords, tokens, API keys, PII (GDPR)
|
|
52
|
+
- Entire request/response bodies — log summary or hash
|
|
53
|
+
- Expected conditions at high levels (validation failures ≠ `error`)
|
|
54
|
+
- Every loop iteration — log the summary
|
|
55
|
+
|
|
56
|
+
## Correlation IDs
|
|
57
|
+
|
|
58
|
+
For multi-step operations:
|
|
59
|
+
|
|
60
|
+
```php
|
|
61
|
+
$correlationId = Str::uuid()->toString();
|
|
62
|
+
Log::info('Import started', ['correlation_id' => $correlationId, ...]);
|
|
63
|
+
Log::info('Import completed', ['correlation_id' => $correlationId, ...]);
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Sentry
|
|
67
|
+
|
|
68
|
+
- Use `MonitoringHelper::captureException()` — never Sentry SDK directly.
|
|
69
|
+
- Breadcrumbs: use `BreadcrumbType` and `BreadcrumbLevel` enums.
|
|
70
|
+
- Context names: use `ContextName` enum.
|
|
71
|
+
- Sentry has 200KB event size limit — large context gets truncated.
|
|
72
|
+
|
|
73
|
+
## Do NOT
|
|
74
|
+
|
|
75
|
+
- Use `var_dump()`, `print_r()`, `dd()` — disallowed by PHPStan.
|
|
76
|
+
- Use Sentry SDK directly — use `MonitoringHelper`.
|
|
77
|
+
- Hardcode log channel names in business logic — use config.
|
|
78
|
+
- Log at `error` for expected/handled conditions — use `warning` or `info`.
|
|
79
|
+
- Interpolate variables into log messages — use context array.
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# Naming Guidelines
|
|
2
|
+
|
|
3
|
+
> Naming conventions — PHP classes, database, routes, variables, modules, agent infrastructure.
|
|
4
|
+
|
|
5
|
+
**Related Skills:** none (naming is a convention — use this guideline directly)
|
|
6
|
+
**Related Guidelines:** [controllers.md](controllers.md), [resources.md](resources.md)
|
|
7
|
+
|
|
8
|
+
## PHP Classes
|
|
9
|
+
|
|
10
|
+
| Type | Pattern | Example |
|
|
11
|
+
|---|---|---|
|
|
12
|
+
| Controller | `{Action}{Entity}Controller` | `CreateProjectController` |
|
|
13
|
+
| FormRequest | `{Action}{Entity}Request` | `UpdateProjectRequest` |
|
|
14
|
+
| Resource | `{Entity}Resource` | `ProjectResource` |
|
|
15
|
+
| Minimal Resource | `{Entity}MinimalResource` | `ProjectMinimalResource` |
|
|
16
|
+
| Simple Resource | `Simple{Entity}Resource` | `SimpleUserResource` |
|
|
17
|
+
| Service | `{Domain}Service` | `ImportService` |
|
|
18
|
+
| DTO | `{Entity}{Purpose}Dto` | `ProjectCreateDto` |
|
|
19
|
+
| Job | `{Action}{Entity}Job` | `SyncCustomerJob` |
|
|
20
|
+
| Event | `{Entity}{PastTense}` | `ProjectCreated` |
|
|
21
|
+
| Enum | `{Entity}{Concept}` | `ImportStatus` |
|
|
22
|
+
| Policy | `{Entity}Policy` | `ProjectPolicy` |
|
|
23
|
+
| Interface | `{Capability}` (no suffix) | `SmsProvider` |
|
|
24
|
+
|
|
25
|
+
**Controller special cases:** List uses **plural** (`ListProjectsController`), all others singular.
|
|
26
|
+
|
|
27
|
+
## Database
|
|
28
|
+
|
|
29
|
+
| Element | Convention | Example |
|
|
30
|
+
|---|---|---|
|
|
31
|
+
| Tables | snake_case, plural | `projects`, `import_rows` |
|
|
32
|
+
| Columns | snake_case | `created_at`, `user_id` |
|
|
33
|
+
| Foreign keys | `{entity}_id` | `project_id` |
|
|
34
|
+
| Booleans | `is_` or `has_` prefix | `is_active`, `has_permission` |
|
|
35
|
+
| Timestamps | `_at` suffix | `synced_at`, `imported_at` |
|
|
36
|
+
| Pivot tables | Alphabetical, singular | `project_user` |
|
|
37
|
+
|
|
38
|
+
## Routes
|
|
39
|
+
|
|
40
|
+
| Element | Convention | Example |
|
|
41
|
+
|---|---|---|
|
|
42
|
+
| URL segments | kebab-case, plural | `/api/v1/import-uploads` |
|
|
43
|
+
| Route names | dot notation | `v1.import-uploads.index` |
|
|
44
|
+
| Route params | camelCase | `{importUpload}` |
|
|
45
|
+
| API versioning | Prefix | `/api/v1/`, `/api/v2/` |
|
|
46
|
+
|
|
47
|
+
## Variables
|
|
48
|
+
|
|
49
|
+
| Element | Convention | Example |
|
|
50
|
+
|---|---|---|
|
|
51
|
+
| Variables | camelCase | `$projectId` |
|
|
52
|
+
| Constants | UPPER_SNAKE_CASE | `MAX_RETRIES` |
|
|
53
|
+
| Array keys | snake_case | `['user_id' => 1]` |
|
|
54
|
+
| Config keys | snake_case, dot notation | `config('import.max_rows')` |
|
|
55
|
+
| Env vars | UPPER_SNAKE_CASE | `APP_ENV` |
|
|
56
|
+
|
|
57
|
+
## Modules
|
|
58
|
+
|
|
59
|
+
| Element | Convention | Example |
|
|
60
|
+
|---|---|---|
|
|
61
|
+
| Directory | PascalCase | `app/Modules/Import/` |
|
|
62
|
+
| Namespace | `App\Modules\{Name}\App\` | `App\Modules\Import\App\Services\` |
|
|
63
|
+
| Route prefix | kebab-case | `import`, `client-software` |
|
|
64
|
+
|
|
65
|
+
## Agent Infrastructure
|
|
66
|
+
|
|
67
|
+
| Element | Convention | Example |
|
|
68
|
+
|---|---|---|
|
|
69
|
+
| Skills | kebab-case | `bug-analyzer` |
|
|
70
|
+
| Rules | kebab-case | `php-coding` |
|
|
71
|
+
| Commands | kebab-case | `feature-plan` |
|
|
72
|
+
| Guidelines | kebab-case | `controllers.md` |
|
|
73
|
+
|
|
74
|
+
## Enums
|
|
75
|
+
|
|
76
|
+
- PascalCase class name
|
|
77
|
+
- UPPERCASE cases: `case PENDING;`, `case IN_PROGRESS;`
|
|
78
|
+
- Backed enums for DB values: `case PENDING = 'pending';`
|
|
79
|
+
|
|
80
|
+
## Interfaces
|
|
81
|
+
|
|
82
|
+
- Namespace: `App\Contracts\{Subdomain}\`
|
|
83
|
+
- No `Interface` suffix: `SmsProvider`, not `SmsProviderInterface`
|
|
84
|
+
|
|
85
|
+
## Do NOT
|
|
86
|
+
|
|
87
|
+
- Use abbreviations that aren't universally understood.
|
|
88
|
+
- Mix naming conventions within the same context.
|
|
89
|
+
- Use generic names (Manager, Helper, Utils) without specificity.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Dependency Injection & Interfaces
|
|
2
|
+
|
|
3
|
+
> Decouple classes from concrete implementations.
|
|
4
|
+
|
|
5
|
+
## Idea
|
|
6
|
+
|
|
7
|
+
Classes depend on **interfaces** (contracts), not on concrete classes.
|
|
8
|
+
Laravel's Service Container resolves the binding at runtime.
|
|
9
|
+
|
|
10
|
+
## When to Use
|
|
11
|
+
|
|
12
|
+
✅ Multiple implementations possible (e.g., payment gateways, notification channels)
|
|
13
|
+
✅ External services that need mocking in tests
|
|
14
|
+
✅ Repository pattern (contract + database implementation)
|
|
15
|
+
|
|
16
|
+
## When NOT to Use
|
|
17
|
+
|
|
18
|
+
❌ Only one implementation exists and is unlikely to change — just inject the concrete class
|
|
19
|
+
❌ Simple utility classes with no side effects
|
|
20
|
+
|
|
21
|
+
## Example
|
|
22
|
+
|
|
23
|
+
```php
|
|
24
|
+
// Contract
|
|
25
|
+
interface PaymentGateway
|
|
26
|
+
{
|
|
27
|
+
public function charge(int $amountInCents): PaymentResult;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// Implementation
|
|
31
|
+
final class StripePaymentGateway implements PaymentGateway
|
|
32
|
+
{
|
|
33
|
+
public function charge(int $amountInCents): PaymentResult
|
|
34
|
+
{
|
|
35
|
+
// Stripe API call...
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Binding in ServiceProvider
|
|
41
|
+
|
|
42
|
+
```php
|
|
43
|
+
$this->app->bind(PaymentGateway::class, StripePaymentGateway::class);
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Naming
|
|
47
|
+
|
|
48
|
+
- Interfaces (contracts): descriptive name without suffix — `PaymentGateway`, `SmsProvider`
|
|
49
|
+
- Implementations: prefixed with technology — `StripePaymentGateway`, `TwilioSmsProvider`
|
|
50
|
+
- Namespace: `App\Contracts\` for interfaces
|
|
51
|
+
|
|
52
|
+
## Rules
|
|
53
|
+
|
|
54
|
+
- One interface = one responsibility (Interface Segregation)
|
|
55
|
+
- Bind in the module's ServiceProvider, not in AppServiceProvider
|
|
56
|
+
- Do **NOT** mark implementation classes `final` if they need mocking in tests
|
|
57
|
+
|