@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,81 @@
|
|
|
1
|
+
# Artisan Command Guidelines
|
|
2
|
+
|
|
3
|
+
> Console command conventions — naming, structure, input/output, safety, scheduling.
|
|
4
|
+
|
|
5
|
+
**Related Skills:** `artisan-commands`
|
|
6
|
+
**Related Guidelines:** [patterns/service-layer.md](patterns/service-layer.md)
|
|
7
|
+
|
|
8
|
+
## Naming
|
|
9
|
+
|
|
10
|
+
- Clear, intention-revealing names: `users:cleanup`, `orders:sync`, `reports:generate`
|
|
11
|
+
- Follow Laravel naming style: `{domain}:{action}`
|
|
12
|
+
|
|
13
|
+
## Structure
|
|
14
|
+
|
|
15
|
+
- Commands **orchestrate** — they accept input, validate conditions, call services, report results.
|
|
16
|
+
- Heavy business logic belongs in services/actions, not in `handle()`.
|
|
17
|
+
- Keep `handle()` readable and linear.
|
|
18
|
+
|
|
19
|
+
## Input
|
|
20
|
+
|
|
21
|
+
- **Arguments** for required primary input.
|
|
22
|
+
- **Options** for toggles, filters, execution modes.
|
|
23
|
+
- Validate critical inputs before expensive/destructive work.
|
|
24
|
+
- Provide safe defaults where appropriate.
|
|
25
|
+
- Use `--force` flag for destructive commands — always check it.
|
|
26
|
+
|
|
27
|
+
## Output
|
|
28
|
+
|
|
29
|
+
- Use `$this->info()`, `$this->warn()`, `$this->error()`, `$this->table()`, progress bars.
|
|
30
|
+
- Keep output readable for both humans and logs.
|
|
31
|
+
- Don't flood the console — use verbose mode for noisy output.
|
|
32
|
+
- `$this->info()` is suppressed in quiet mode — use `$this->line()` for critical info.
|
|
33
|
+
|
|
34
|
+
## Interactive vs Automated
|
|
35
|
+
|
|
36
|
+
- Use confirmations for destructive operations in manual commands.
|
|
37
|
+
- **Never** add interactive prompts to scheduler/CI commands.
|
|
38
|
+
- Support non-interactive execution (`--no-interaction`).
|
|
39
|
+
|
|
40
|
+
## Batch and Long-Running
|
|
41
|
+
|
|
42
|
+
- Use chunking, cursors, or batching for large datasets.
|
|
43
|
+
- Report progress for long-running tasks.
|
|
44
|
+
- Handle partial failures intentionally.
|
|
45
|
+
- Avoid loading large datasets into memory at once.
|
|
46
|
+
|
|
47
|
+
## Safety
|
|
48
|
+
|
|
49
|
+
- Treat cleanup, repair, sync, and deletion as high-risk.
|
|
50
|
+
- Add safeguards for destructive operations.
|
|
51
|
+
- Be explicit about dry-run behavior if supported.
|
|
52
|
+
- Never perform irreversible work silently.
|
|
53
|
+
- Add environment checks for production commands.
|
|
54
|
+
|
|
55
|
+
## Scheduling
|
|
56
|
+
|
|
57
|
+
Commands for the scheduler must:
|
|
58
|
+
- Run non-interactively
|
|
59
|
+
- Be idempotent where possible
|
|
60
|
+
- Log/report useful status
|
|
61
|
+
- Fail loudly enough for monitoring
|
|
62
|
+
|
|
63
|
+
## Error Handling
|
|
64
|
+
|
|
65
|
+
- Fail with meaningful messages.
|
|
66
|
+
- Don't swallow exceptions silently.
|
|
67
|
+
- Return appropriate exit codes.
|
|
68
|
+
- Surface enough context to diagnose without exposing sensitive data.
|
|
69
|
+
|
|
70
|
+
## Testing
|
|
71
|
+
|
|
72
|
+
- Test behavior, not just class existence.
|
|
73
|
+
- Assert: exit codes, console output, side effects, option/argument behavior.
|
|
74
|
+
|
|
75
|
+
## Do NOT
|
|
76
|
+
|
|
77
|
+
- Put business logic in commands — delegate to services.
|
|
78
|
+
- Use `dd()` or `var_dump()` — use `$this->info()` / `$this->error()`.
|
|
79
|
+
- Skip input validation in command signatures.
|
|
80
|
+
- Make scheduled commands interactive.
|
|
81
|
+
- Run destructive operations without safeguards.
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Blade UI Guidelines
|
|
2
|
+
|
|
3
|
+
> Blade template conventions — views, components, partials, forms, escaping, styling.
|
|
4
|
+
|
|
5
|
+
**Related Skills:** `blade-ui`, `livewire`, `flux`
|
|
6
|
+
**Related Guidelines:** [controllers.md](controllers.md)
|
|
7
|
+
|
|
8
|
+
## View Structure
|
|
9
|
+
|
|
10
|
+
- Use the project's existing layout system.
|
|
11
|
+
- Organize templates into clear sections.
|
|
12
|
+
- Extract repeated sections into partials or components.
|
|
13
|
+
- Prefer semantic HTML.
|
|
14
|
+
- Avoid deeply nested conditionals — use a partial/component instead.
|
|
15
|
+
|
|
16
|
+
## Blade Logic
|
|
17
|
+
|
|
18
|
+
- Use Blade directives for **simple presentation logic** only.
|
|
19
|
+
- Keep conditionals small and view-focused.
|
|
20
|
+
- No business calculations or database access in templates.
|
|
21
|
+
- No heavy data transformations in Blade.
|
|
22
|
+
- Move non-trivial formatting to controllers, view models, presenters, or components.
|
|
23
|
+
|
|
24
|
+
## Components
|
|
25
|
+
|
|
26
|
+
- Use Blade components for reusable UI pieces (when project already uses them).
|
|
27
|
+
- Keep component APIs clean and explicit — clear prop/slot names.
|
|
28
|
+
- Don't create a component for something used only once (unless it significantly improves clarity).
|
|
29
|
+
|
|
30
|
+
## Partials
|
|
31
|
+
|
|
32
|
+
- Use partials for repeated markup fragments when a full component is unnecessary.
|
|
33
|
+
- Name partials clearly per project conventions.
|
|
34
|
+
- Avoid deep partial hierarchies that make UI hard to trace.
|
|
35
|
+
|
|
36
|
+
## Forms
|
|
37
|
+
|
|
38
|
+
- Follow the project's form style for labels, inputs, validation messages, old values, session feedback.
|
|
39
|
+
- Use CSRF protection correctly.
|
|
40
|
+
- Render validation errors consistently.
|
|
41
|
+
- Preserve user input using project conventions.
|
|
42
|
+
- Reuse existing field components/partials — don't duplicate.
|
|
43
|
+
|
|
44
|
+
## Validation and Feedback
|
|
45
|
+
|
|
46
|
+
- Display validation errors clearly and consistently.
|
|
47
|
+
- Show success/error flash messages per project conventions.
|
|
48
|
+
- Keep feedback near the relevant UI.
|
|
49
|
+
- Don't invent a second feedback pattern if one already exists.
|
|
50
|
+
|
|
51
|
+
## Escaping and Output Safety
|
|
52
|
+
|
|
53
|
+
- Escape output by default — use `{{ }}`.
|
|
54
|
+
- Use `{!! !!}` only when intentionally safe and already sanitized.
|
|
55
|
+
- Be careful with rich content, HTML snippets, and user-generated content.
|
|
56
|
+
|
|
57
|
+
## Styling
|
|
58
|
+
|
|
59
|
+
- Reuse existing CSS/Tailwind conventions.
|
|
60
|
+
- Don't introduce a new styling approach in one template.
|
|
61
|
+
- Match class usage with neighboring templates.
|
|
62
|
+
- If the project uses design-system components, follow them.
|
|
63
|
+
- Always use utility classes — not inline styles.
|
|
64
|
+
|
|
65
|
+
## Accessibility
|
|
66
|
+
|
|
67
|
+
- Use labels for form fields.
|
|
68
|
+
- Prefer semantic elements.
|
|
69
|
+
- Add ARIA only where it meaningfully improves accessibility.
|
|
70
|
+
|
|
71
|
+
## Do NOT
|
|
72
|
+
|
|
73
|
+
- Place business logic in Blade templates.
|
|
74
|
+
- Query the database from views.
|
|
75
|
+
- Echo unescaped user data without explicit sanitization.
|
|
76
|
+
- Inline large blocks of CSS or JS — use asset files.
|
|
77
|
+
- Duplicate repeated markup when a component/partial exists.
|
|
78
|
+
- `@include` shares parent scope — components don't. Know the difference.
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# Controller Guidelines
|
|
2
|
+
|
|
3
|
+
> Project-specific controller conventions. Thin controllers, single-action pattern, OpenAPI annotations.
|
|
4
|
+
|
|
5
|
+
**Related Skills:** `api-endpoint`, `laravel`, `openapi`
|
|
6
|
+
**Related Guidelines:** [validations.md](validations.md), [resources.md](resources.md)
|
|
7
|
+
|
|
8
|
+
## Core Rules
|
|
9
|
+
|
|
10
|
+
- **Single Action Controllers** only (`__invoke()`) — no Resource Controllers
|
|
11
|
+
- Each controller must have: FormRequest, OpenAPI schema attributes
|
|
12
|
+
- Use Resource responses where applicable (not all controllers return JSON — e.g. Delete returns an empty response, file downloads return a file stream)
|
|
13
|
+
- Thin controllers — business logic in Services/Actions
|
|
14
|
+
|
|
15
|
+
## Naming Schema
|
|
16
|
+
|
|
17
|
+
| Action | Controller | FormRequest | Resource |
|
|
18
|
+
|---------|-----------------------------|----------------------------|----------------------|
|
|
19
|
+
| Create | `Create{Entity}Controller` | `Create{Entity}Request` | `{Entity}Resource` |
|
|
20
|
+
| List | `List{Entities}Controller` | `List{Entities}Request` | `{Entity}Resource` |
|
|
21
|
+
| Show | `Show{Entity}Controller` | `Show{Entity}Request` | `{Entity}Resource` |
|
|
22
|
+
| Update | `Update{Entity}Controller` | `Update{Entity}Request` | `{Entity}Resource` |
|
|
23
|
+
| Delete | `Delete{Entity}Controller` | `Delete{Entity}Request` | empty `Response` |
|
|
24
|
+
| Restore | `Restore{Entity}Controller` | `Restore{Entity}Request` | `{Entity}Resource` |
|
|
25
|
+
|
|
26
|
+
> List uses **plural** entity name. All others use **singular**.
|
|
27
|
+
|
|
28
|
+
## HTTP Actions
|
|
29
|
+
|
|
30
|
+
| Action | Method | Path | Notes |
|
|
31
|
+
|---------|--------|----------------------|-------------------------------------------|
|
|
32
|
+
| Create | POST | `/api/{entities}` | JSON body |
|
|
33
|
+
| List | GET | `/api/{entities}` | Filters, Pagination |
|
|
34
|
+
| Show | GET | `/api/{entities}/{id}` | |
|
|
35
|
+
| Update | PATCH | `/api/{entities}/{id}` | JSON body |
|
|
36
|
+
| Delete | DELETE | `/api/{entities}/{id}` | `?force=true` for hard delete |
|
|
37
|
+
| Restore | GET | `/api/{entities}/{id}/restore` | |
|
|
38
|
+
|
|
39
|
+
## Controller Pattern
|
|
40
|
+
|
|
41
|
+
```php
|
|
42
|
+
class CreateLinkController extends Controller
|
|
43
|
+
{
|
|
44
|
+
#[CreateLinkRequestSchema(path: '/links', version: '1', resource: LinkResource::class)]
|
|
45
|
+
#[CreateResourceResponseSchema(LinkResource::class)]
|
|
46
|
+
#[ValidationErrorResponse]
|
|
47
|
+
public function __invoke(CreateLinkRequest $request): LinkResource
|
|
48
|
+
{
|
|
49
|
+
$link = Link::create($request->validated());
|
|
50
|
+
return LinkResource::make($link);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**Key points:**
|
|
56
|
+
- Use `$request->validated()` — never `$request->all()`
|
|
57
|
+
- Use `Resource::make()` instead of `new Resource()` (easier to test)
|
|
58
|
+
- Simple CRUD can live directly in the controller
|
|
59
|
+
- Complex logic → Service class / Repository
|
|
60
|
+
|
|
61
|
+
## Filters & Ordering
|
|
62
|
+
|
|
63
|
+
Use the `pipeline` / `paginatedPipeline` macros with filter classes:
|
|
64
|
+
|
|
65
|
+
```php
|
|
66
|
+
$links = Link::query()
|
|
67
|
+
->paginatedPipeline([
|
|
68
|
+
StringFilter::on('text')->isLike()->some(),
|
|
69
|
+
DateFilter::on('created_at')->all(),
|
|
70
|
+
OrderFilter::on(['id', 'name'])->default(['id' => 'asc']),
|
|
71
|
+
]);
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## OpenAPI Documentation
|
|
75
|
+
|
|
76
|
+
- Always extend `{Action}ResourceRequestSchema` for Create/Update/List (keeps controllers clean)
|
|
77
|
+
- Show/Delete/Restore use the base schema classes directly
|
|
78
|
+
- No per-endpoint auth/permission error schemas (documented globally)
|
|
79
|
+
- **`ValidationErrorResponse`** must be added to **every** controller that accepts input (Create, Update, etc.)
|
|
80
|
+
- **`ResourceNotFoundResponse`** must be added to every controller that queries a single entity (Show, Update, Delete, Restore)
|
|
81
|
+
|
|
82
|
+
| Action | Request Schema | Response Schema | Error Responses |
|
|
83
|
+
|---------|--------------------------|----------------------------|----------------------------------------------------|
|
|
84
|
+
| Create | Extended (custom class) | `CreateResourceResponseSchema` | `ValidationErrorResponse` |
|
|
85
|
+
| List | Extended (custom class) | `ListResourceResponseSchema` | |
|
|
86
|
+
| Show | `ShowResourceRequestSchema` | `ShowResourceResponseSchema` | `ResourceNotFoundResponse` |
|
|
87
|
+
| Update | Extended (custom class) | `UpdateResourceResponseSchema` | `ValidationErrorResponse`, `ResourceNotFoundResponse` |
|
|
88
|
+
| Delete | `DeleteResourceRequestSchema` | `DeleteResourceResponseSchema` | `ResourceNotFoundResponse` |
|
|
89
|
+
| Restore | `RestoreResourceRequestSchema` | `RestoreResourceResponseSchema` | `ResourceNotFoundResponse` |
|
|
90
|
+
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# Database Guidelines
|
|
2
|
+
|
|
3
|
+
> Database conventions — indexing, query optimization, migrations, transactions, multi-connection patterns.
|
|
4
|
+
|
|
5
|
+
**Related Skills:** `database`, `eloquent`, `multi-tenancy`
|
|
6
|
+
**Related Guidelines:** [eloquent.md](eloquent.md)
|
|
7
|
+
|
|
8
|
+
## Indexing
|
|
9
|
+
|
|
10
|
+
### When to add indexes
|
|
11
|
+
|
|
12
|
+
- Columns in `WHERE` clauses
|
|
13
|
+
- Columns in `JOIN` conditions
|
|
14
|
+
- Columns in `ORDER BY` (especially with pagination)
|
|
15
|
+
- Foreign key columns (Laravel adds with `foreignId()`)
|
|
16
|
+
|
|
17
|
+
### When NOT to add indexes
|
|
18
|
+
|
|
19
|
+
- Boolean columns with low selectivity (99% same value)
|
|
20
|
+
- Small tables (< 1000 rows)
|
|
21
|
+
- Frequently updated columns (indexes slow writes)
|
|
22
|
+
|
|
23
|
+
### Composite indexes
|
|
24
|
+
|
|
25
|
+
Order matters — most selective column first:
|
|
26
|
+
|
|
27
|
+
```php
|
|
28
|
+
$table->index(['customer_id', 'created_at']);
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Query Optimization
|
|
32
|
+
|
|
33
|
+
### EXPLAIN analysis
|
|
34
|
+
|
|
35
|
+
| Column | Bad value | Meaning |
|
|
36
|
+
|---|---|---|
|
|
37
|
+
| `type` | `ALL` | Full table scan — needs index |
|
|
38
|
+
| `rows` | High number | Too many rows examined |
|
|
39
|
+
| `Extra` | `Using filesort` | Sorting without index |
|
|
40
|
+
| `Extra` | `Using temporary` | Temp table — optimize GROUP BY/DISTINCT |
|
|
41
|
+
| `key` | `NULL` | No index used |
|
|
42
|
+
|
|
43
|
+
Good values: `type` = `ref`, `eq_ref`, `const`; `Extra` = `Using index`.
|
|
44
|
+
|
|
45
|
+
### Anti-patterns
|
|
46
|
+
|
|
47
|
+
| Anti-pattern | Fix |
|
|
48
|
+
|---|---|
|
|
49
|
+
| `SELECT *` in production | Select only needed columns |
|
|
50
|
+
| `LIKE '%search%'` | Fulltext search or `LIKE 'search%'` |
|
|
51
|
+
| `OFFSET` on large tables | Cursor pagination |
|
|
52
|
+
| Subquery in WHERE | Rewrite as JOIN |
|
|
53
|
+
| `ORDER BY RAND()` | Application-level randomization |
|
|
54
|
+
|
|
55
|
+
### Pagination
|
|
56
|
+
|
|
57
|
+
Always paginate list endpoints — never `get()` on unbounded queries:
|
|
58
|
+
|
|
59
|
+
```php
|
|
60
|
+
// Standard
|
|
61
|
+
$users = User::query()->paginate(15);
|
|
62
|
+
|
|
63
|
+
// Cursor pagination for large tables
|
|
64
|
+
$users = User::query()->orderBy('id')->cursorPaginate(15);
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Migrations
|
|
68
|
+
|
|
69
|
+
- Use `php artisan make:migration` to generate.
|
|
70
|
+
- Use `decimal` for money — never `float`.
|
|
71
|
+
- Add foreign keys with `constrained()` + proper `onDelete()`.
|
|
72
|
+
- Always add indexes for searchable/filterable columns.
|
|
73
|
+
- One logical change per migration.
|
|
74
|
+
- Make reversible when possible (`down()` method).
|
|
75
|
+
|
|
76
|
+
### Multi-connection migrations
|
|
77
|
+
|
|
78
|
+
```php
|
|
79
|
+
Schema::connection('tenant_database')->create('projects', function (Blueprint $table) {
|
|
80
|
+
// ...
|
|
81
|
+
});
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Transactions
|
|
85
|
+
|
|
86
|
+
```php
|
|
87
|
+
// Single connection
|
|
88
|
+
DB::transaction(function () use ($order, $items): void {
|
|
89
|
+
$order->save();
|
|
90
|
+
$order->items()->createMany($items);
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
// Explicit connection
|
|
94
|
+
DB::connection('tenant_database')->transaction(function () {
|
|
95
|
+
// Tenant-specific operations
|
|
96
|
+
});
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Multi-Connection Architecture
|
|
100
|
+
|
|
101
|
+
- Always specify `$connection` on models.
|
|
102
|
+
- Use explicit connection in migrations targeting specific databases.
|
|
103
|
+
- Transactions are per-connection — cross-connection requires manual begin/commit/rollback.
|
|
104
|
+
|
|
105
|
+
## Do NOT
|
|
106
|
+
|
|
107
|
+
- Use raw SQL with user input — always parameterize.
|
|
108
|
+
- Use `float` for money — use `decimal`.
|
|
109
|
+
- Use `get()` or `all()` on large tables without pagination.
|
|
110
|
+
- Run migrations without specifying connection in multi-DB project.
|
|
111
|
+
- Add indexes without checking existing ones — duplicates waste write performance.
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
# Eloquent Model Guidelines
|
|
2
|
+
|
|
3
|
+
> Project-specific Eloquent conventions. Getter/setter pattern, casts, fillable, defaults.
|
|
4
|
+
|
|
5
|
+
**Related Skills:** `eloquent`, `database`, `migration-creator`
|
|
6
|
+
**Related Guidelines:** [patterns/repositories.md](patterns/repositories.md)
|
|
7
|
+
|
|
8
|
+
## Core Rules
|
|
9
|
+
|
|
10
|
+
- Add `$attributes` array for all columns with database defaults
|
|
11
|
+
- Use `$casts` for type casting (encrypted, arrays, enums, dates, booleans)
|
|
12
|
+
- Every model attribute MUST have a **getter** and a **fluent setter**
|
|
13
|
+
- Fluent setters: prefer `static` as return type (preserves subclass types). Use `self` when the class is `final` or when `self` is intentionally more precise.
|
|
14
|
+
|
|
15
|
+
## Getter/Setter Architecture
|
|
16
|
+
|
|
17
|
+
There are **two layers** — inside the model vs. outside the model. Never mix them up.
|
|
18
|
+
|
|
19
|
+
### Inside the model (implementing getters/setters)
|
|
20
|
+
|
|
21
|
+
**ALWAYS** use `getAttribute()` / `setAttribute()` — these are the Eloquent internals
|
|
22
|
+
that respect `$casts`, accessors, and mutators. **NEVER** use `$this->column_name`
|
|
23
|
+
magic property access inside the model — not for attributes, not for relationships.
|
|
24
|
+
|
|
25
|
+
**Cast the return value** when the attribute is NOT in `$casts`:
|
|
26
|
+
|
|
27
|
+
```php
|
|
28
|
+
// ✅ Good — getAttribute() with explicit cast (attribute NOT in $casts)
|
|
29
|
+
public function isActive(): bool
|
|
30
|
+
{
|
|
31
|
+
return (bool) $this->getAttribute('active');
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// user_id is not in $casts, so cast explicitly
|
|
35
|
+
public function getUserId(): ?int
|
|
36
|
+
{
|
|
37
|
+
$value = $this->getAttribute('user_id');
|
|
38
|
+
|
|
39
|
+
return null === $value ? null : (int) $value;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// ✅ Good — NO manual cast needed (attribute IS in $casts)
|
|
43
|
+
// protected $casts = ['is_paused' => 'boolean'];
|
|
44
|
+
public function isPaused(): bool
|
|
45
|
+
{
|
|
46
|
+
return $this->getAttribute('is_paused');
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// ❌ Bad — magic property access
|
|
50
|
+
public function isActive(): bool
|
|
51
|
+
{
|
|
52
|
+
return (bool) $this->active;
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Fluent setter pattern:
|
|
57
|
+
```php
|
|
58
|
+
public function setUserId(?int $userId): static
|
|
59
|
+
{
|
|
60
|
+
$this->setAttribute('user_id', $userId);
|
|
61
|
+
return $this;
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Outside the model (calling code: services, controllers, jobs, tests, etc.)
|
|
66
|
+
|
|
67
|
+
**Always use getters and setters. Never use `getAttribute()` / `setAttribute()` directly.**
|
|
68
|
+
|
|
69
|
+
```php
|
|
70
|
+
// ✅ Good — use getters/setters
|
|
71
|
+
$config->isPaused();
|
|
72
|
+
$config->setIsPaused(true)->save();
|
|
73
|
+
$name = $customer->getName();
|
|
74
|
+
|
|
75
|
+
// ❌ Bad — calling getAttribute/setAttribute from outside the model
|
|
76
|
+
$config->getAttribute('is_paused');
|
|
77
|
+
$config->setAttribute('is_paused', true)->save();
|
|
78
|
+
|
|
79
|
+
// ❌ Bad — direct property access
|
|
80
|
+
$config->is_paused;
|
|
81
|
+
$config->is_paused = true;
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**Why:** Getters/setters provide type safety, IDE autocompletion, and a stable API.
|
|
85
|
+
If the underlying column changes, only the model internals need updating.
|
|
86
|
+
|
|
87
|
+
## Relationship Getters
|
|
88
|
+
|
|
89
|
+
Every relationship MUST have a **typed getter method** placed directly **above** the relationship method.
|
|
90
|
+
Outside the model, always use the getter — never access the magic property.
|
|
91
|
+
|
|
92
|
+
```php
|
|
93
|
+
// ✅ Good — getter uses getAttribute(), placed above the relationship method
|
|
94
|
+
public function getEquipment(): ?Equipment
|
|
95
|
+
{
|
|
96
|
+
return $this->getAttribute('equipment');
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
public function equipment(): BelongsTo
|
|
100
|
+
{
|
|
101
|
+
return $this->belongsTo(Equipment::class, 'item_id', 'item_id');
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// ✅ Good — calling code uses getter
|
|
105
|
+
$equipment = $repair->getEquipment();
|
|
106
|
+
|
|
107
|
+
// ❌ Bad — magic property inside getter
|
|
108
|
+
public function getEquipment(): ?Equipment
|
|
109
|
+
{
|
|
110
|
+
return $this->equipment; // NEVER do this
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// ❌ Bad — accessing magic property from outside the model
|
|
114
|
+
$equipment = $repair->equipment;
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
When checking if a relationship result exists, use `instanceof` instead of `null ===`:
|
|
118
|
+
|
|
119
|
+
```php
|
|
120
|
+
// ✅ Good — type-safe check
|
|
121
|
+
if (!$equipment instanceof Equipment) {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// ❌ Bad — less type-safe
|
|
126
|
+
if (null === $equipment) {
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
## Observers over `booted()`
|
|
132
|
+
|
|
133
|
+
Do NOT use `booted()` / `boot()` for model lifecycle hooks (`saving`, `saved`, `deleted`, etc.).
|
|
134
|
+
Use a dedicated **Observer** class registered via the `#[ObservedBy]` attribute.
|
|
135
|
+
|
|
136
|
+
```php
|
|
137
|
+
// ✅ Good — Observer registered via attribute
|
|
138
|
+
#[ObservedBy([RepairObserver::class])]
|
|
139
|
+
class Repair extends Model { /* ... */ }
|
|
140
|
+
|
|
141
|
+
// ❌ Bad — lifecycle logic in booted()
|
|
142
|
+
class Repair extends Model
|
|
143
|
+
{
|
|
144
|
+
protected static function booted(): void
|
|
145
|
+
{
|
|
146
|
+
static::saving(static function (Repair $repair): void { /* ... */ });
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
**Why:** Observers keep models slim, make lifecycle logic testable and discoverable,
|
|
152
|
+
and follow the established project pattern (all other models use `#[ObservedBy]`).
|
|
153
|
+
|
|
154
|
+
## Default Attributes
|
|
155
|
+
|
|
156
|
+
```php
|
|
157
|
+
protected $attributes = [
|
|
158
|
+
'options' => [],
|
|
159
|
+
'default_role' => 'staff',
|
|
160
|
+
'verified' => false,
|
|
161
|
+
];
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### Expressive Setters
|
|
165
|
+
|
|
166
|
+
Prefer expressive method names over generic setters when they improve readability:
|
|
167
|
+
|
|
168
|
+
```php
|
|
169
|
+
// ✅ Better — intent is clear
|
|
170
|
+
$model->activate();
|
|
171
|
+
|
|
172
|
+
// 🆗 OK but less expressive
|
|
173
|
+
$model->setActive(true);
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
## Model Updates
|
|
177
|
+
|
|
178
|
+
Always use validated data — never `$request->all()`:
|
|
179
|
+
|
|
180
|
+
```php
|
|
181
|
+
// ✅ Good
|
|
182
|
+
$model->update($request->validated());
|
|
183
|
+
|
|
184
|
+
// ❌ Bad — passes unvalidated data
|
|
185
|
+
$model->update($request->all());
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
## Prefer Model Casts — No Redundant Manual Casting
|
|
189
|
+
|
|
190
|
+
When an attribute is defined in `$casts` (or `casts()` method), do **not** manually cast it again
|
|
191
|
+
in getters. The model already handles the conversion.
|
|
192
|
+
|
|
193
|
+
```php
|
|
194
|
+
// ✅ Good — no manual cast needed, model handles it
|
|
195
|
+
public function isPaused(): bool
|
|
196
|
+
{
|
|
197
|
+
return $this->getAttribute('is_paused');
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// ❌ Bad — redundant (bool) cast when already in $casts
|
|
201
|
+
public function isPaused(): bool
|
|
202
|
+
{
|
|
203
|
+
return (bool) $this->getAttribute('is_paused');
|
|
204
|
+
}
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
This applies to all cast types: `boolean`, `integer`, `float`, `array`, `datetime`, enums, etc.
|
|
208
|
+
If the attribute is cast, trust the cast — do not re-cast in PHP.
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Flux UI Guidelines
|
|
2
|
+
|
|
3
|
+
> Flux component conventions — usage, variants, forms, icons, Livewire integration.
|
|
4
|
+
|
|
5
|
+
**Related Skills:** `flux`, `livewire`, `blade-ui`
|
|
6
|
+
|
|
7
|
+
## Component Usage
|
|
8
|
+
|
|
9
|
+
- Use Flux components (`<flux:*>`) instead of raw HTML where a Flux equivalent exists.
|
|
10
|
+
- Follow the project's existing Flux usage patterns.
|
|
11
|
+
- Check Flux docs at https://fluxui.dev/docs for latest API.
|
|
12
|
+
|
|
13
|
+
## Common Components
|
|
14
|
+
|
|
15
|
+
```blade
|
|
16
|
+
{{-- Button --}}
|
|
17
|
+
<flux:button variant="primary">Save</flux:button>
|
|
18
|
+
<flux:button variant="danger" wire:click="delete">Delete</flux:button>
|
|
19
|
+
|
|
20
|
+
{{-- Input --}}
|
|
21
|
+
<flux:input wire:model="name" label="Name" placeholder="Enter name" />
|
|
22
|
+
|
|
23
|
+
{{-- Select --}}
|
|
24
|
+
<flux:select wire:model="status" label="Status">
|
|
25
|
+
<flux:option value="active">Active</flux:option>
|
|
26
|
+
<flux:option value="inactive">Inactive</flux:option>
|
|
27
|
+
</flux:select>
|
|
28
|
+
|
|
29
|
+
{{-- Modal --}}
|
|
30
|
+
<flux:modal name="confirm-delete">
|
|
31
|
+
<flux:heading>Delete item?</flux:heading>
|
|
32
|
+
<flux:text>This action cannot be undone.</flux:text>
|
|
33
|
+
<flux:button variant="danger" wire:click="delete">Confirm</flux:button>
|
|
34
|
+
</flux:modal>
|
|
35
|
+
|
|
36
|
+
{{-- Table --}}
|
|
37
|
+
<flux:table>
|
|
38
|
+
<flux:columns>
|
|
39
|
+
<flux:column>Name</flux:column>
|
|
40
|
+
</flux:columns>
|
|
41
|
+
<flux:rows>
|
|
42
|
+
@foreach($items as $item)
|
|
43
|
+
<flux:row :key="$item->id">
|
|
44
|
+
<flux:cell>{{ $item->name }}</flux:cell>
|
|
45
|
+
</flux:row>
|
|
46
|
+
@endforeach
|
|
47
|
+
</flux:rows>
|
|
48
|
+
</flux:table>
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Variants and Styling
|
|
52
|
+
|
|
53
|
+
- Use `variant` prop: `primary`, `danger`, `ghost`, `subtle`, `outline`.
|
|
54
|
+
- Use `size` prop: `sm`, `base`, `lg`.
|
|
55
|
+
- Add custom Tailwind via `class` only when Flux doesn't cover the need.
|
|
56
|
+
- Don't override Flux's built-in styling with conflicting classes.
|
|
57
|
+
|
|
58
|
+
## Forms
|
|
59
|
+
|
|
60
|
+
- Use `<flux:input>`, `<flux:textarea>`, `<flux:select>`, `<flux:checkbox>`.
|
|
61
|
+
- Use `label` prop — Flux handles the `<label>` element.
|
|
62
|
+
- Use `wire:model` for Livewire binding.
|
|
63
|
+
- Flux components automatically display validation errors.
|
|
64
|
+
|
|
65
|
+
## Icons
|
|
66
|
+
|
|
67
|
+
- `<flux:icon name="heroicon-name" />` — Heroicons naming convention.
|
|
68
|
+
|
|
69
|
+
## Livewire Integration
|
|
70
|
+
|
|
71
|
+
- `wire:click`, `wire:submit`, `wire:model` work directly on Flux components.
|
|
72
|
+
- Modals: `$this->modal('name')->show()`.
|
|
73
|
+
|
|
74
|
+
## Do NOT
|
|
75
|
+
|
|
76
|
+
- Use raw `<button>`, `<input>`, `<select>` when Flux equivalent exists.
|
|
77
|
+
- Override Flux component styles globally — use variants or slots.
|
|
78
|
+
- Mix Flux with a different UI library in the same view.
|
|
79
|
+
- Skip `label` prop on form fields — accessibility matters.
|
|
80
|
+
- Add manual error rendering alongside Flux (it's built-in).
|